/*
 * Departamento de Ciência da Computação
 * Tradutores 02/2009 - turma A
 * Professor Marco Aurélio
 * Alunos: Danilo Gaby Andersen Trindade - 06/82039
 *         Alex Rodrigo de Oliveira      - 06/30403
 */

#ifndef _ACTIONS_H
#define _ACTIONS_H


/**
 * Em que linha estamos.
 */
extern int here;


/**
 * Inicializador.
 */
void act_init();


/**
 * Finaliza o analisador semântico.
 */
void act_end();


/**
 * Faz uma atribuição.
 */
int act_atr(int lval, int exp, char tp);


/**
 * Procura essa variável na tabela global ou cria ela.
 */
int act_lval_id0(char *lex);


/**
 * Procura essa variável na tabela local ou cria ela.
 */
int act_lval_id1(char *lex);


/**
 * Encontra essa variável nas tabelas.
 */
int act_id(char *lex);


/**
 * Expressões lógicas e aritméticas.
 */
int act_exp_eq(int a1, int a2);

int act_exp_lt(int a1, int a2);

int act_exp_gt(int a1, int a2);

int act_exp_le(int a1, int a2);

int act_exp_ge(int a1, int a2);

int act_exp_ne(int a1, int a2);

int act_exp_add(int a1, int a2);

int act_exp_sub(int a1, int a2);

int act_exp_mult(int a1, int a2);

int act_exp_mod(int a1, int a2);

int act_exp_div(int a1, int a2);


/**
 * Salva um inteiro em um registrador.
 */
int act_atom_int(int val);


/**
 * Fim da função.
 */
int act_fn();


/**
 * Cria uma função, associa-a à sua tabela de escopo e ao seu box.
 */
int act_fn_id(const char *lex);


/**
 * Cria uma tabela de escopo e adiciona os lexemas nela.
 */
int act_param(char *lex);


#endif /* _ACTIONS_H */
